package com.benshou.bsoa.common.trace;

import org.slf4j.MDC;

/**
 * TraceId上下文工具类
 */
public class TraceIdContext {
    public static final String TRACE_ID = "traceId";

    /**
     * 生成新的TraceId
     */
    public static String generateTraceId() {
        return UUIDShort.generate();
    }

    /**
     * 获取当前TraceId（不存在则生成）
     */
    public static String getOrGenerateTraceId() {
        String traceId = MDC.get(TRACE_ID);
        if (traceId == null || traceId.isEmpty()) {
            traceId = generateTraceId();
            MDC.put(TRACE_ID, traceId);
        }
        return traceId;
    }

    /**
     * 设置TraceId到上下文
     */
    public static void putTraceId(String traceId) {
        if (traceId != null && !traceId.isEmpty()) {
            MDC.put(TRACE_ID, traceId);
        } else {
            throw new IllegalArgumentException("Invalid traceId format");
        }
    }

    /**
     * 清除当前TraceId
     */
    public static void clearTraceId() {
        MDC.remove(TRACE_ID);
    }

    /**
     * 获取当前TraceId（可能为空）
     */
    public static String getCurrentTraceId() {
        return MDC.get(TRACE_ID);
    }

    /**
     * 确保TraceId存在（适用于非Web环境）
     */
    public static void ensureTraceIdExists() {
        if (getCurrentTraceId() == null) {
            MDC.put(TRACE_ID, generateTraceId());
        }
    }
}